﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.UI;
using OwnZTec.LojaDelivery.Data;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class FrmBaixaManual : OwnZForm
    {
        List<listaBaixa> lista;

        private bool carregado { get; set; }
        public tbVenda Venda
        { get; set; }

        public FrmBaixaManual()
        {
            InitializeComponent();
        }

        private void AtualizaGrid()
        {
            Cursor = Cursors.WaitCursor;

            lista = new List<listaBaixa>();
            listaBaixa listaItem = new listaBaixa();

            var lista1 = Contexto.Db.tbVendas.Where(p => p.statusVenda == "E").Union(Contexto.Db.tbVendas.Where(p => p.statusVenda == "P")).ToList();
            //gvPedidos.DataSource = Contexto.Db.tbVendas.Where(p => p.statusVenda == "E").Union(Contexto.Db.tbVendas.Where(p => p.statusVenda == "P")).ToList();

            ////var lista = Contexto.Db.tbVendas.ToList();
            ////var lista2 = lista.Where(p => p.statusVenda == "E").Union(lista.Where(p=>p.statusVenda == "P")).ToList();

            //foreach (var item in Contexto.Db.tbVendas.Where(p => p.statusVenda == "E").ToList())
            foreach (var item in lista1)
            {
                listaItem = new listaBaixa();
                listaItem.data = item.dtVenda.ToString("dd/MM/yyyy");
                listaItem.idPedido = item.idVenda;
                listaItem.numPedido = Contexto.Db.tbVendas.First(p => p.idVenda == item.idVenda).numeroVenda.ToString();
                listaItem.idCliente = item.idCliente;
                listaItem.valorTotal = item.valorVenda;
                switch (item.statusVenda.ToUpper())
                {
                    case "A":
                        listaItem.status = "Aberto";
                        break;
                    case "E":
                        listaItem.status = "Para Entrega";
                        break;
                    case "F":
                        listaItem.status = "Fechada";
                        break;
                    case "P":
                        listaItem.status = "Pendente Pagamento";
                        break;
                    case "C":
                        listaItem.status = "Cancelada";
                        break;
                    default:
                        break;
                }
                lista.Add(listaItem);
            }

            gvPedidos.DataSource = lista;

            Cursor = Cursors.Arrow;
        }

        private void AtualizaGrid(int idCliente)
        {
            Cursor = Cursors.WaitCursor;

            //listaPedidos = new List<DebitoCliente>();
            //DebitoCliente listaItem = new DebitoCliente();

            lista = new List<listaBaixa>();
            listaBaixa listaItem = new listaBaixa();


            var lista1 = Contexto.Db.tbVendas.Where(p => p.statusVenda == "E").Where(p => p.idCliente == idCliente).Union(Contexto.Db.tbVendas.Where(p => p.statusVenda == "P").Where(p => p.idCliente == idCliente)).ToList();

            //var lista = Contexto.Db.tbVendas.Where(p => p.idCliente == idCliente).ToList();
            //var lista2 = lista.Where(p => p.statusVenda == "E").Union(lista.Where(p => p.statusVenda == "P")).ToList();

            //foreach (var item in Contexto.Db.tbVendas.Where(p => p.statusVenda == "E").ToList())
            foreach (var item in lista1)
            //foreach (var item in Contexto.Db.tbVendas.Where(p => p.idCliente == idCliente).Where(p => p.statusVenda == "E").ToList())
            {
                listaItem = new listaBaixa();
                listaItem.data = item.dtVenda.ToString("dd/MM/yyyy");
                listaItem.idPedido = item.idVenda;
                listaItem.numPedido = Contexto.Db.tbVendas.First(p => p.idVenda == item.idVenda).numeroVenda.ToString();
                listaItem.idCliente = item.idCliente;
                listaItem.valorTotal = item.valorVenda;

                switch (item.statusVenda.ToUpper())
                {
                    case "A":
                        listaItem.status = "Aberto";
                        break;
                    case "E":
                        listaItem.status = "Para Entrega";
                        break;
                    case "F":
                        listaItem.status = "Fechada";
                        break;
                    case "P":
                        listaItem.status = "Pendente Pagamento";
                        break;
                    case "C":
                        listaItem.status = "Cancelada";
                        break;
                    default:
                        break;
                }
                lista.Add(listaItem);
            }

            gvPedidos.DataSource = lista;

            Cursor = Cursors.Arrow;
        }

        private void CarregaCliente()
        {
            cboClientes.DataSource = Contexto.Db.tbClientes.ToList();
            cboClientes.DisplayMember = "desCliente";
            cboClientes.ValueMember = "idCliente";
            cboClientes.SelectedIndex = -1;
        }

        private void rbTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTodos.Checked)
                grpData.Visible = false;
        }

        private void rbData_CheckedChanged(object sender, EventArgs e)
        {
            if (rbData.Checked)
                grpData.Visible = true;
        }

        private void cboClientes_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
            if (carregado)
                AtualizaGrid(cboClientes.SelectedValue.ParaInt());
        }

        private void FrmBaixaManual_Load(object sender, EventArgs e)
        {
            carregado = false;
            CarregaCliente();
            cboClientes.DropDownListElement.AutoCompleteSuggest.SuggestMode = SuggestMode.Contains;

            AtualizaGrid();
            Contexto.MainForm.Cursor = Cursors.Arrow;
            carregado = true;
        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            lista = (List<listaBaixa>)gvPedidos.DataSource;
            lista = lista.Where(p => p.marcar == true).ToList();

            if (lista.Count == 0)
            {
                MessageBox.Show("Nenhum item marcado para baixa");
                return;
            }


            //var lista1 = Contexto.Db.tbVendas;
            foreach (listaBaixa item in lista)
            {
                Venda = new tbVenda();
                Venda = Contexto.Db.tbVendas.First(p => p.idVenda == item.idPedido);
                Venda.statusVenda = "F";

                //Contexto.Db.tbVendas.AddObject(Venda);
                Contexto.Db.SaveChanges();     
            }
            AtualizaGrid();

            MessageBox.Show("Itens atualizados");

        }

        private void btnMarcarTodos_Click(object sender, EventArgs e)
        {
            lista = (List<listaBaixa>)gvPedidos.DataSource;
            foreach (listaBaixa item in lista)
            {
                item.marcar = true;
            }

            gvPedidos.DataSource = null;
            gvPedidos.DataSource = lista;
        }
    }

    public class listaBaixa
    {
        public bool marcar { get; set; }
        public string data { get; set; }
        public string numPedido { get; set; }
        public decimal valorTotal { get; set; }
        public int idPedido { get; set; }
        public int idCliente { get; set; }

        public string status{get;set;}

    }
}
